/**
 * huize Service Inc
 * All Rights Reserved @2018
 */
package com.huize.zhike.framework.common.util;

import java.math.BigDecimal;

/**
 * 描述: fix保费值
 *
 * @author tianyuliang
 * @version $Id: PriceFormatUtils.java, v0.1 2021/2/4
 */
public class PriceFormatUtils {

    /**
     * 万元
     */
    public static final Long MILLION_RMB = 10000L;

    /**
     * 万元
     */
    public static final BigDecimal MILLION_RMB_VALUE = new BigDecimal(MILLION_RMB.toString());

    /**
     * 除法的结果 保留小数点位数, 如果不设置将可能出现无限循环小数
     */
    public static final int roundingMode = 6;

    /**
     * 修复保费数值(保费单位:万元)
     * 1) 如果数字在区间[-1, 1]之间，则保留1位小数
     * 2) 如果保费在[-∞, -1] 或者 [1, +∞]，则仅仅保留整数即可
     *
     * @param value
     * @return
     */
    public static String fix(BigDecimal value) {
        if (value == null || Double.isNaN(value.doubleValue()) || Double.valueOf(value.doubleValue()).isInfinite()) {
            return "0";
        }
        String result = NumberUtils.format(value.doubleValue());
        return result;
    }

    /**
     * 修复保费数值(保费单位:万元)
     * 1) 如果数字在区间[-1, 1]之间，则保留1位小数
     * 2) 如果保费在[-∞, -1] 或者 [1, +∞]，则仅仅保留整数即可
     *
     * @param value
     * @return
     */
    public static String customFix(BigDecimal value) {
        if (value == null || Double.isNaN(value.doubleValue()) || Double.valueOf(value.doubleValue()).isInfinite()) {
            return "0";
        }
        double d = value.doubleValue();
        if (d < 0) {
            return Double.valueOf(Math.ceil(d)).longValue() + "";
        }
        return Double.valueOf(Math.round(d)).longValue() + "";
    }

    /**
     * 2个数相除，计算百分比结果
     *
     * @param value 除数(分子)
     * @param sum   被除数(分母)
     * @return
     */
    public static String percent(BigDecimal value, BigDecimal sum) {
        if (value == null || sum == null) {
            return "0.0";
        }
        Double divide = NumberUtils.percent(value, sum);
        String result = NumberUtils.formatPercent(divide);
        return result;
    }

    /**
     * 单位换算，元--->万元，计算百分比结果
     *
     * @param value 除数(分子)
     * @return
     */
    public static String percentMillion(BigDecimal value) {
        if (value == null) {
            return "0.0";
        }
        Double divide = NumberUtils.divide(value.doubleValue(), MILLION_RMB_VALUE.doubleValue());
        String result = NumberUtils.formatPercent(divide);
        return result;
    }

    /**
     * 单位换算，万元--->元，不需要保留小数点
     *
     * @param value 除数(分子)
     * @return
     */
    public static String percentRMB(BigDecimal value) {
        if (value == null) {
            return "0";
        }
        Double divide = NumberUtils.multiply(value.doubleValue(), MILLION_RMB_VALUE.doubleValue());
        String result = String.valueOf(divide.intValue());
        return result;
    }


    /**
     * 单位换算，万元--->元，不需要保留小数点
     *
     * @param value 除数(分子)
     * @return
     */
    public static String percentRMB(Double value) {
        if (value == null) {
            return "0";
        }
        Double divide = NumberUtils.multiply(value.doubleValue(), MILLION_RMB_VALUE.doubleValue());
        String result = String.valueOf(divide.intValue());
        return result;
    }

    /**
     * 修复保费数值(保费单位:万元),保留1位小数点
     */
    public static String percent(BigDecimal value) {
        if (value == null) {
            return "0.0";
        }
        String result = NumberUtils.formatPercent(value.doubleValue());
        return result;
    }

}